package com.hsnn.medstgmini.sys.dao;

import java.util.List;
import java.util.Map;

import com.hsnn.medstgmini.sys.model.SysPrivilege;
import com.hsnn.medstgmini.sys.model.SysRole;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.util.Pagination;

/**
 * @category 角色
 * @author 蔡春龙
 * @date 2015年6月12日
 */
public interface SysRoleDao {

	/**
	 * @category 查询用户所属角色
	 * @date 2015年6月12日
	 * @param user
	 * @return
	 */
	List<SysRole> getRoleListByUser(SysUser user);

	/**
	 * @category 中心查询角色管理列表
	 * @date 2015年6月14日
	 * @param page
	 * @param role
	 * @return
	 */
	List<SysRole> getZxRoleList(Pagination page, SysRole role);

	/**
	 * @category 启用|停用
	 * @param hospInfo
	 */
	void changeStatus(SysRole role);

	/**
	 * @category 批量(启用|停用)
	 * @param list
	 */
	void batchChangeStatus(List<SysRole> list);
	
	/**
	 * @category 启用|停用
	 * @param hospInfo
	 */
	void subChangeStatus(SysRole role);

	/**
	 * @category 批量(启用|停用)
	 * @param list
	 */
	void subBatchChangeStatus(List<SysRole> list);

	/**
	 * @category 根据id查询角色信息
	 * @date 2015年6月14日
	 * @param id
	 * @return
	 */
	SysRole getRoleById(String id);

	/**
	 * @category 中心保存角色信息
	 * @date 2015年6月14日
	 * @param role
	 */
	void zxSaveRole(SysRole role, List<SysPrivilege> list);

	/**
	 * @category 中心保存子角色信息
	 * @author 韩守松
	 * @date   2015年10月16日
	 * @param  @param role
	 */
	void zxSaveRole(SysRole role);
	
	/**
	 * @category 查询父级角色列表
	 * @date 2015年6月15日
	 * @param exceptRoleId为需要排除的id
	 * @return
	 */
	List<SysRole> getZxFatherRoleList(String... exceptRoleId);

	/**
	 * @category 医疗机构、生产企业、配送企业管理员查询公共子角色和自定义子角色管理列表
	 * @date 2015年6月16日
	 * @param page翻页
	 * @param role当前管理员角色
	 * @param userId当前管理员id
	 * @return
	 */
	List<SysRole> getSubRoleList(Pagination page, SysRole role,
			SysRole editRole, String userId);
	
	/**
	 * @category 中心查询角色管理列表
	 * @date 2015年6月14日
	 * @param role
	 * @return
	 */
	List<SysRole> getZxRoleList();
	
	/**
	 * @category 中心、医疗机构、生产企业、配送企业查询子角色列表
	 * @date 2015年6月14日
	 * @param role
	 * @return
	 */
	List<Object> getSubRoleListByType(String roleId,String orgId);
	List<SysRole> getSubRoleList(SysUser su);
	
	/**
	 * @category 根据机构id及主账户查询父级id
	 * @author 韩守松
	 * @date   2015年10月16日
	 * @param  @return
	 */
	 List<Object[]> getFatherIdList(String roleId,String boundId);
	 
	 /**
		 * @category 根据主账户id获取主角色id
		 * @author 韩守松
		 * @date   2015年10月19日
		 * @param  @param userRootId
		 * @param  @return
		 */
     String getUserRoleById(String userRootId);
     
     
     Pagination getSubRoleList(Pagination page);
     
     /**
 	 * @category 根据父级角色id更新其子角色数据（status）
 	 * @author 韩守松
 	 * @date   2015年10月21日
 	 * @param  @param pid
 	 * @param  @param level
 	 */
 	 void updateByPid(String id,Integer level);
 	 
 	/**
 	 * @category 保存角色日志
 	 * @date 2015年11月5日16:49:46
 	 * @param roleId
 	 */
 	void writeRoleLog(String id);
 	public void addRole(SysRole role);
 	public void eidtRole(SysRole role);
 	public void deleteRole(SysRole role);
 	public List getUserRoleList(String userId);
}
